/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mentaproduto.persistencia;

import java.util.logging.Level;
import java.util.logging.Logger;
import mentaproduto.exception.ValidarException;
import mentaproduto.modelo.EntProduto;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import mentaproduto.util.Conexao;
import mentaproduto.util.DaoModelo;
import mentaproduto.vo.VOProduto;

/**
 *
 * @author Administrador
 */
public class PerProduto extends DaoModelo {

    @Override
    public boolean inserirProduto(Object obj) {
        try {
            con = Conexao.getConexao();

            EntProduto produto = (EntProduto) new EntProduto().getFromValueObject(obj);
            sql = "insert into tb_cadProduto (nome,descricao,preco,precoPromocional,foto,promocao,estoque) values (?,?,?,?,?,?,?)";
            ps = con.prepareStatement(sql);

            ps.setString(1, produto.getNome());
            ps.setString(2, produto.getDescricao());
            ps.setDouble(3, produto.getPreco());
            ps.setDouble(4, produto.getPrecoPromocional());
            ps.setString(5, produto.getFoto());
            ps.setBoolean(6, produto.isPromocao());
            ps.setInt(7, produto.getEstoque());

            ps.execute();
            return true;

        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        } catch (ValidarException ex) {
            Logger.getLogger(PerProduto.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

    public List consultarProduto(VOProduto produto) {
        try {
            List lista = new ArrayList();
            con = Conexao.getConexao();

            sql = "select codigo,nome,descricao,preco,precoPromocional,foto,promocao,estoque from tb_cadProduto ";
            if (!produto.getNome().equals("")) {
                sql += "  where nome like ? ";
                if (!produto.getDescricao().equals("")) {
                    sql += " and descricao like ? ";
                }
            } else if (!produto.getDescricao().equals("")) {
                sql += " where descricao like ? ";
            }
            ps = con.prepareStatement(sql);

            if (!produto.getNome().equals("")) {
                ps.setString(1, "%"+produto.getNome()+"%");
                if (!produto.getDescricao().equals("")) {
                    ps.setString(2, "%"+produto.getDescricao()+"%");
                }
            } else if (!produto.getDescricao().equals("")) {
                ps.setString(1, "%"+produto.getDescricao()+"%");
            }


            rs = ps.executeQuery();

            while (rs.next()) {

                VOProduto prod = new VOProduto();
                prod.setCodigo(rs.getInt("codigo"));
                prod.setNome(rs.getString("nome"));
                prod.setDescricao(rs.getString("descricao"));
                prod.setEstoque(rs.getInt("estoque"));
                prod.setFoto(rs.getString("foto"));
                prod.setPreco(rs.getDouble("preco"));
                prod.setPrecoPromocional(rs.getDouble("precoPromocional"));
                prod.setPromocao(rs.getBoolean("promocao"));

                lista.add(prod);

            }

            return lista;

        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    public ArrayList<VOProduto> consularProduto() throws ValidarException {
        con = Conexao.getConexao();
        sql = "select codigo,nome,descricao,preco,precoPromocional,foto,promocao,estoque from tb_cadProduto  ";
        try {
            ps = con.prepareStatement(sql);
            // ps.setString(1, nome);
            rs = ps.executeQuery();
            ArrayList<VOProduto> arrayProduto = new ArrayList<VOProduto>();
            while (rs.next()) {

                produto = new EntProduto();
                produto.setCodigo(rs.getInt("codigo"));
                produto.setNome(rs.getString("nome"));
                produto.setDescricao(rs.getString("descricao"));
                produto.setEstoque(rs.getInt("estoque"));
                produto.setFoto(rs.getString("foto"));
                produto.setPreco(rs.getDouble("preco"));
                produto.setPrecoPromocional(rs.getDouble("precoPromocional"));
                produto.setPromocao(rs.getBoolean("promocao"));
                arrayProduto.add((VOProduto) produto.getValueObject());
            }
            return arrayProduto;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

    public VOProduto consultarProduto(int id) {
        con = Conexao.getConexao();
        sql = "select codigo,nome,descricao,preco,precoPromocional,foto,promocao,estoque from tb_cadProduto where codigo = ?";

        try {
            produto = new EntProduto();
            ps = con.prepareStatement(sql);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if (rs.next()) {
                try {
                    produto.setCodigo(rs.getInt("codigo"));
                    produto.setNome(rs.getString("nome"));
                    produto.setDescricao(rs.getString("descricao"));
                    produto.setEstoque(rs.getInt("estoque"));
                    produto.setFoto(rs.getString("foto"));
                    produto.setPreco(rs.getDouble("preco"));
                    produto.setPrecoPromocional(rs.getDouble("precoPromocional"));
                    produto.setPromocao(rs.getBoolean("promocao"));
                } catch (ValidarException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return (VOProduto) produto.getValueObject();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

    public boolean alterarProduto(VOProduto vo) throws ValidarException {
        produto = (EntProduto) new EntProduto().getFromValueObject(vo);
        con = Conexao.getConexao();
        sql = "update tb_cadProduto " +
                "set nome = ? ," +
                "descricao = ? ," +
                "preco = ? ," +
                "precoPromocional = ? ," +
                "foto = ? ," +
                "promocao = ?," +
                "estoque = ? " +
                "where codigo = ?";

        try {
            ps = con.prepareStatement(sql);

            ps.setString(1, produto.getNome());
            ps.setString(2, produto.getDescricao());
            ps.setDouble(3, produto.getPreco());
            ps.setDouble(4, produto.getPrecoPromocional());
            ps.setString(5, produto.getFoto());
            ps.setBoolean(6, produto.isPromocao());
            ps.setInt(7, produto.getEstoque());
            ps.setInt(8, produto.getCodigo());


            ps.executeUpdate();

            return true;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }
    }
}
